package view.aptc.kieu;

import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;

import oracle.adf.model.BindingContext;
import oracle.adf.model.binding.DCBindingContainer;
import oracle.adf.model.binding.DCIteratorBinding;
import oracle.adf.view.rich.component.rich.RichPopup;
import oracle.adf.view.rich.event.DialogEvent;

import oracle.adf.view.rich.event.PopupCanceledEvent;

import oracle.binding.BindingContainer;
import oracle.binding.OperationBinding;

import oracle.jbo.Row;

import org.apache.myfaces.trinidad.event.AttributeChangeEvent;
import org.apache.myfaces.trinidad.render.ExtendedRenderKitService;
import org.apache.myfaces.trinidad.util.Service;

import view.common.Utils;

public class kieubean {
    private RichPopup newPopupVN;
    private RichPopup newPopupEN;
    private RichPopup newPopupDeleteVN;
    private RichPopup newPopupDeleteEN;
    private static int operationType = 0; //0: CreateInsert, 1: Update
    private String tieudeVN;
    private String tieudeEN;

    public kieubean() {
    }

    /**
     * @param actionEvent
     * Thêm mới Kiểu tạp chí tiếng Việt
     */
    public void createVN(ActionEvent actionEvent) {
        Utils.execute("CreateInsertVN");
        Utils.showPopup(newPopupVN);
        this.operationType = 0;
    }

    /**
     * @param actionEvent
     * Thêm mới Kiểu tạp chí tiếng Anh
     */
    public void createEN(ActionEvent actionEvent) {
        Utils.execute("CreateInsertEN");
        Utils.showPopup(newPopupEN);
        this.operationType = 0;
    }

    /**
     * @param actionEvent
     * Cập nhật Kiểu tạp chí tiếng Việt
     */
    public void updateVN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("AptcKieuView_VN1Iterator").getCurrentRow() ==
            null) {
            Utils.showMessage(Utils.MSG_ERROR,
                              "Bạn chưa chọn kiểu tạp chí nào.");
        } else {
            Utils.showPopup(newPopupVN);
            this.operationType = 1;
        }
    }

    /**
     * @param actionEvent
     * Cập nhật Kiểu tạp chí tiếng Anh
     */
    public void updateEN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("AptcKieuView_EN1Iterator").getCurrentRow() ==
            null) {
            Utils.showMessage(Utils.MSG_ERROR,
                              "Bạn chưa chọn kiểu tạp chí nào.");
        } else {
            Utils.showPopup(newPopupEN);
            this.operationType = 1;
        }
    }

    /**
     * @param dialogEvent
     * Thực thi thủ tục truy xuất thông tin Kiểu tạp chí tiếng Việt vào cơ sở dữ liệu
     */
    public void commitVN(DialogEvent dialogEvent) {
        DCIteratorBinding kieuIterator =
            Utils.getIteratorBinding("AptcKieuView_VN1Iterator");
        boolean validated = true;
        if (kieuIterator.getAllRowsInRange().length > 0) {
            if (tieudeVN.equals(kieuIterator.getCurrentRow().getAttribute("Tieude")) ==
                false) {
                if (Utils.checkExisted(tieudeVN, "Tieude",
                                       "AptcKieuValidate1Iterator", "vi")) {
                    validated = false;
                    Utils.showMessage(Utils.MSG_ERROR,
                                      "Tiêu đề bạn vừa nhập đã tồn tại trong hệ thống.");
                }
            }
        }
        if (validated) {
            kieuIterator.getCurrentRow().setAttribute("Tieude", tieudeVN);
            kieuIterator.getCurrentRow().setAttribute("NgonNgu", "vi");
            Utils.execute("Commit");
            Utils.iteratorRefresh("AptcKieuView_VN1Iterator");
            Utils.iteratorRefresh("AptcKieuView_EN1Iterator");
            this.operationType = 0;
        }
    }

    /**
     * @param dialogEvent
     * Thực thi thủ tục truy xuất thông tin Kiểu tạp chí tiếng Anh vào cơ sở dữ liệu
     */
    public void commitEN(DialogEvent dialogEvent) {
        DCIteratorBinding kieuIterator =
            Utils.getIteratorBinding("AptcKieuView_EN1Iterator");
        boolean validated = true;
        if (kieuIterator.getAllRowsInRange().length > 0) {
            if (tieudeEN.equals(kieuIterator.getCurrentRow().getAttribute("Tieude")) ==
                false) {
                if (Utils.checkExisted(tieudeEN, "Tieude",
                                       "AptcKieuValidate1Iterator", "en")) {
                    validated = false;
                    Utils.showMessage(Utils.MSG_ERROR,
                                      "Tiêu đề bạn vừa nhập đã tồn tại trong hệ thống.");
                }
            }
        }
        if (validated) {
            kieuIterator.getCurrentRow().setAttribute("Tieude", tieudeEN);
            kieuIterator.getCurrentRow().setAttribute("NgonNgu", "en");
            Utils.execute("Commit");
            Utils.iteratorRefresh("AptcKieuView_EN1Iterator");
            Utils.iteratorRefresh("AptcKieuView_VN1Iterator");
            this.operationType = 0;
        }
    }

    /**
     * @param popupCanceledEvent
     * Đóng của sổ Popup
     */
    public void cancelDiaglog(PopupCanceledEvent popupCanceledEvent) {
        Utils.execute("Rollback");
        Utils.iteratorRefresh("AptcKieuView_EN1Iterator");
        Utils.iteratorRefresh("AptcKieuView_VN1Iterator");
        this.operationType = 0;
    }

    /**
     * @param dialogEvent
     * Xóa Kiểu tạp chí tiếng Việt
     */
    public void deleteVN(DialogEvent dialogEvent) {
        Utils.execute("DeleteVN");
        List constrainExist = Utils.execute("Commit");
        if (constrainExist != null &&
            constrainExist.toString().contains("APTC_SO_APTC_KIEU_FK")) {
            Utils.showMessage(Utils.MSG_ERROR,
                              "Có số tạp chí đang thuộc kiểu tạp chí này. Bạn không thể xóa kiểu tạp chí này.");
        }
        Utils.iteratorRefresh("AptcKieuView_VN1Iterator");
        this.operationType = 0;
    }

    /**
     * @param dialogEvent
     * Xóa Kiểu tạp chí tiếng Anh
     */
    public void deleteEN(DialogEvent dialogEvent) {
        Utils.execute("DeleteEN");
        List constrainExist = Utils.execute("Commit");
        if (constrainExist != null &&
            constrainExist.toString().contains("APTC_SO_APTC_KIEU_FK")) {
            Utils.showMessage(Utils.MSG_ERROR,
                              "Có số tạp chí đang thuộc kiểu tạp chí này. Bạn không thể xóa kiểu tạp chí này.");
        }
        Utils.iteratorRefresh("AptcKieuView_EN1Iterator");
        this.operationType = 0;
    }

    public void setNewPopupVN(RichPopup newPopupVN) {
        this.newPopupVN = newPopupVN;
    }

    public RichPopup getNewPopupVN() {
        return newPopupVN;
    }

    public void setNewPopupEN(RichPopup newPopupEN) {
        this.newPopupEN = newPopupEN;
    }

    public RichPopup getNewPopupEN() {
        return newPopupEN;
    }

    public static void setOperationType(int operationType) {
        kieubean.operationType = operationType;
    }

    public static int getOperationType() {
        return operationType;
    }

    public void setTieudeVN(String tieudeVN) {
        this.tieudeVN = tieudeVN;
    }

    public String getTieudeVN() {
        if (operationType == 1) {
            DCIteratorBinding kieuIterator =
                Utils.getIteratorBinding("AptcKieuView_VN1Iterator");
            if (kieuIterator.getAllRowsInRange().length > 0) {
                tieudeVN =
                        kieuIterator.getCurrentRow().getAttribute("Tieude").toString();
            }
        }
        return tieudeVN;
    }

    public void setTieudeEN(String tieudeEN) {
        this.tieudeEN = tieudeEN;
    }

    public String getTieudeEN() {
        if (operationType == 1) {
            DCIteratorBinding kieuIterator =
                Utils.getIteratorBinding("AptcKieuView_EN1Iterator");
            if (kieuIterator.getAllRowsInRange().length > 0) {
                tieudeEN =
                        kieuIterator.getCurrentRow().getAttribute("Tieude").toString();
            }
        }
        return tieudeEN;
    }

    public void setNewPopupDeleteVN(RichPopup newPopupDeleteVN) {
        this.newPopupDeleteVN = newPopupDeleteVN;
    }

    public RichPopup getNewPopupDeleteVN() {
        return newPopupDeleteVN;
    }

    public void setNewPopupDeleteEN(RichPopup newPopupDeleteEN) {
        this.newPopupDeleteEN = newPopupDeleteEN;
    }

    public RichPopup getNewPopupDeleteEN() {
        return newPopupDeleteEN;
    }

    public void openDeletePopupVN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("AptcKieuView_VN1Iterator").getCurrentRow() ==
            null) {
            Utils.showMessage(Utils.MSG_ERROR,
                              "Bạn chưa chọn kiểu tạp chí nào.");
        } else {
            Utils.showPopup(newPopupDeleteVN);
        }
    }

    public void openDeletePopupEN(ActionEvent actionEvent) {
        if (Utils.getIteratorBinding("AptcKieuView_EN1Iterator").getCurrentRow() ==
            null) {
            Utils.showMessage(Utils.MSG_ERROR,
                              "Bạn chưa chọn kiểu tạp chí nào.");
        } else {
            Utils.showPopup(newPopupDeleteEN);
        }
    }
}
